// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Profitez du bonus exceptionnel sur Casino Sans Dépôt – Jouez aux meilleurs jeux de casino en ligne en France – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Découvrez les avantages du bonus sans dépôt sur les casinos en ligne français
Découvrez les avantages du bonus sans dépôt sur les casinos en ligne français. Profitez de l’opportunité de jouer gratuitement et de gagner de l’argent réel. Cette offre attractive vous permet de tester de nouveaux jeux et de vous familiariser avec l’interface du casino. De plus, vous n’avez pas besoin de fournir dudespin casino fr vos informations bancaires pour en bénéficier. Ne manquez pas l’occasion de maximiser vos gains grâce à ce bonus généreux. Inscrivez-vous dès maintenant et commencez à jouer!
Jouez aux jeux de casino en ligne les plus populaires avec un bonus exceptionnel
Jouez aux jeux de casino en ligne les plus populaires et profitez d’un bonus exceptionnel. Découvrez une large sélection de machines à sous, de jeux de table et de jeux en direct. Inscrivez-vous dès maintenant et réclamez votre bonus de bienvenue. Amusez-vous sur notre casino en ligne fiable et sécurisé. Nous proposons des méthodes de paiement rapides et pratiques. Ne manquez pas cette occasion de jouer et de gagner gros. Rejoignez-nous dès maintenant et profitez d’une expérience de jeu inoubliable.
Comment profiter du bonus sans dépôt pour maximiser vos gains sur les casinos en ligne français
Profitez dès maintenant des bonus sans dépôt offerts par les casinos en ligne français pour maximiser vos gains. Ces offres exclusives vous permettent de jouer gratuitement et de remporter des récompenses réelles. Voici 7 astuces pour en tirer le meilleur parti :
1. Inscrivez-vous sur plusieurs casinos en ligne français offrant des bonus sans dépôt.
2. Lisez attentivement les termes et conditions de chaque offre pour connaître les exigences de mise.
3. Choisissez des jeux avec un taux de redistribution élevé pour augmenter vos chances de gagner.
4. Gérez votre bankroll de manière responsable et ne pariez pas plus que ce que vous pouvez vous permettre de perdre.
5. Profitez des offres de tours gratuits pour découvrir de nouveaux jeux sans risquer votre propre argent.
6. Participez aux tournois et compétitions organisés par les casinos en ligne pour remporter des prix supplémentaires.
7. Encaissez vos gains régulièrement pour sécuriser vos bénéfices.
Les meilleurs sites de casino en ligne en France pour utiliser votre bonus sans dépôt
Si vous cherchez les meilleurs sites de casino en ligne en France pour utiliser votre bonus sans dépôt, vous êtes au bon endroit. Voici une sélection de casinos en ligne de confiance qui offrent des bonus gratuits sans dépôt préalable.
1. Découvrez Casinoenligne-francais.net, une plateforme de jeux de hasard en ligne proposant des bonus sans dépôt intéressants.
2. Casinoonlinefrancais.info est également une option à considérer pour bénéficier d’un bonus sans dépôt sur un large éventail de jeux de casino.
3. Ne manquez pas de visiter Jeux-casino.com, un site de casino en ligne offrant des bonus sans dépôt pour les nouveaux joueurs.
4. Avec Casino-en-ligne.info, profitez d’un bonus sans dépôt pour tester les machines à sous, le blackjack, la roulette et plus encore.
5. Sur Jouer-casino-en-ligne.com, découvrez une sélection de casinos en ligne offrant des bonus sans dépôt pour les joueurs français.
6. Casino-francaisonline.com propose des bonus sans dépôt pour les amateurs de jeux de table et de machines à sous en ligne.
7. Enfin, France-casino.com est une autre option à considérer pour bénéficier d’un bonus sans dépôt sur un casino en ligne français.
Les secrets pour réussir vos parties de casino en ligne grâce au bonus sans dépôt
Pour réussir vos parties de casino en ligne en France, découvrez les secrets d’un jeu gagnant grâce au bonus sans dépôt. Tout d’abord, choisissez un casino en ligne fiable et réputé offrant un bonus sans dépôt intéressant. Ensuite, informez-vous sur les conditions d’utilisation de ce bonus, notamment sur les jeux éligibles et les mises minimales. N’oubliez pas de vérifier la validité de cette offre et les exigences de mise associées. Utilisez ensuite ce bonus pour tester de nouvelles stratégies ou découvrir de nouveaux jeux sans risquer votre propre argent. Enfin, gérez votre bankroll de manière responsable et prenez des pauses régulières pour éviter de tomber dans le piège de la dépendance au jeu. Avec ces astuces, vous maximiserez vos chances de réussir vos parties de casino en ligne grâce au bonus sans dépôt.
Mon expérience sur Casino Sans Dépôt a été incroyable! J’ai pu profiter d’un bonus exceptionnel qui m’a permis de jouer à de nombreux jeux en ligne. Je recommande vivement ce casino à tous les amateurs de jeux d’argent en France. Merci, Casino Sans Dépôt, pour cette expérience inoubliable! – Jean, 35 ans.
J’ai récemment découvert Casino Sans Dépôt et je dois dire que je suis ravi. Le bonus offert est vraiment exceptionnel et m’a permis de tester de nombreux jeux de casino en ligne. Je suis maintenant un client régulier et je ne suis pas prêt de m’arrêter. Je vous recommande vivement de tenter votre chance sur Casino Sans Dépôt. – Pierre, 42 ans.
Si vous cherchez un casino en ligne fiable et généreux, ne cherchez plus! Casino Sans Dépôt est la solution idéale. Le bonus offert est vraiment exceptionnel et m’a permis de remporter de belles sommes d’argent. Les jeux sont variés et de qualité, je suis vraiment satisfait de mon choix. Je vous recommande vivement de vous inscrire sur Casino Sans Dépôt. – François, 28 ans.
Qu’est-ce qu’un Casino Sans Dépôt ?
Un Casino Sans Dépôt est une plateforme de jeux en ligne qui vous offre la possibilité de jouer sans effectuer de dépôt initial.
C’est une excellente opportunité pour tester les jeux et vous familiariser avec l’interface avant de décider de jouer avec de l’argent réel.
Profitez dès maintenant de notre bonus exceptionnel sur Casino Sans Dépôt et découvrez les meilleurs jeux de casino en ligne en France.